#include "lcmdrv.h"
#include "SSD1322.h"


/* 定義前景色及背景色變量，用於ASCII碼、漢字、窗口、單色位圖顯示 */
TCOLOR  disp_color = 1;
TCOLOR  back_color = 0;


/****************************************************************************
* 名稱：GUI_Initialize()
* 功能：初始化GUI，包括初始化顯示緩衝區，初始化LCM並清屏。
* 入口參數：無
* 出口參數：無
* 說明：用戶根據LCM的實際情況編寫此函數。
****************************************************************************/
void GUI_Initialize(void)
{
    OLED_Init();//OLED初始化
    OLED_Clear();//清屏
}
/****************************************************************************
* 名稱：GUI_FillSCR()
* 功能：全屏填充。直接使用數據填充顯示緩衝區。
* 入口參數：dat     填充的數據
* 出口參數：無
* 說明：用戶根據LCM的實際情況編寫此函數。
****************************************************************************/
void  GUI_FillSCR(TCOLOR dat)
{
    if (dat == 0x01) {
        dat = 0xff;
    }
    OLED_FillRam(dat);

}
/****************************************************************************
* 名稱：GUI_ClearSCR()
* 功能：清屏。
* 入口參數：無
* 出口參數：無
* 說明：用戶根據LCM的實際情況編寫此函數。
****************************************************************************/
void  GUI_ClearSCR()
{
    OLED_Clear();
}
/****************************************************************************
* 名稱：GUI_Point()
* 功能：在指定位置上畫點。
* 入口參數： x      指定點所在列的位置
*            y      指定點所在行的位置
*            color  顯示顏色(對於黑白色LCM，為0時滅，為1時顯示)
* 出口參數：返回值為1時表示操作成功，為0時表示操作失敗。(操作失敗原因是指定地址超出有
*          效範圍)
* 說明：用戶根據LCM的實際情況編寫此函數。
****************************************************************************/
void  GUI_Point(uint16_t x, uint8_t y, TCOLOR color)
{
    OLED_DrawPoint(x, y, color);
}
/****************************************************************************
* 名稱：GUI_ReadPoint()
* 功能：讀取指定點的顏色。
* 入口參數：x       指定點所在列的位置
*           y       指定點所在行的位置
*           ret     保存顏色值的指針
* 出口參數：返回0表示指定地址超出緩衝區範圍
* 說明：對於單色，設置ret的d0位為1或0，4級灰度則為d0、d1有效，8位RGB則d0--d7有效，
*      RGB結構則R、G、B變量有效。
****************************************************************************/
uint8_t  GUI_ReadPoint(uint16_t x, uint8_t y, TCOLOR *ret)
{
    *ret = OLED_ReadPoint(x, y);
    return 0;
}
/****************************************************************************
* 名稱：GUI_HLine()
* 功能：畫水平線。
* 入口參數： x0     水平線起點所在列的位置
*           y0      水平線起點所在行的位置
*           x1      水平線終點所在列的位置
*           color   顯示顏色(對於黑白色LCM，為0時滅，為1時顯示)
* 出口參數：無
* 說明：對於單色、4級灰度的液晶，可通過修改此函數作圖提高速度，如單色LCM，可以一次更
*      新8個點，而不需要一個點一個點的寫到LCM中。
****************************************************************************/
void  GUI_HLine(uint16_t x0, uint8_t y0, uint16_t x1, TCOLOR color)
{
    uint8_t  temp;
    if (x0 > x1) {          // 對x0、x1大小進行排列，以便畫圖
        temp = x1;
        x1 = x0;
        x0 = temp;
    }
    do {
        GUI_Point(x0, y0, color);   // 逐點顯示，描出垂直線
        x0++;
    } while (x1 >= x0);
}
/****************************************************************************
* 名稱：GUI_RLine()
* 功能：畫垂直線。
* 入口參數： x0     垂直線起點所在列的位置
*           y0      垂直線起點所在行的位置
*           y1      垂直線終點所在行的位置
*           color   顯示顏色
* 出口參數：無
* 說明：對於單色、4級灰度的液晶，可通過修改此函數作圖提高速度，如單色LCM，可以一次更
*      新8個點，而不需要一個點一個點的寫到LCM中。
****************************************************************************/
void  GUI_RLine(uint16_t x0, uint8_t y0, uint8_t y1, TCOLOR color)
{
    uint8_t  temp;
    if (y0 > y1) {  // 對y0、y1大小進行排列，以便畫圖
        temp = y1;
        y1 = y0;
        y0 = temp;
    }
    do {
        GUI_Point(x0, y0, color);   // 逐點顯示，描出垂直線
        y0++;
    } while (y1 >= y0);
}
/****************************************************************************
* 名稱：GUI_Refresh()
* 功能：刷新屏幕
*
****************************************************************************/
void  GUI_Refresh(void)
{
    OLED_RefreshGram();
}


